package com.example.llademo.util;

import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * @author zhangqi
 * @date 2024/4/1
 * @time 16:05
 * @description
 */
@Slf4j
public class DateUtil {
    private final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMM yyyy HH:mm:ss.SSS", Locale.ENGLISH);

    /**
     * 转换llaDate字符串格式化到Date
     * @param llaDateStr
     * @return
     */
    public static Date convertLlaDate(String llaDateStr)  {
        try {
            // 解析为LocalDateTime
            LocalDateTime localDateTime = LocalDateTime.parse(llaDateStr, formatter);
            // 假设localDateTime已经是UTC+8的时间，这里我们不需要转换时区
            // 如果localDateTime是其他时区的时间，则需要先转换为UTC时间
            // 将LocalDateTime转换为UTC+8时区
            ZonedDateTime zonedDateTimeWithOffset = localDateTime.atZone(ZoneId.of("Asia/Shanghai")); // 或者直接使用 ZoneOffset.ofHours(8)

            // 转换为Date对象
            return Date.from(zonedDateTimeWithOffset.toInstant());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将科学计数法的字符串改为时间Date
     * @param sTimestampStr
     * @return
     */
    public static Date sTimestampStr2Date(String sTimestampStr){
        long timestamp = new BigDecimal(sTimestampStr).longValueExact();
        return new Date(timestamp);
    }

    //时间字符串转为时间Date
    public static Date timeFormatter(String timeStr,String formatterPattern){
        // 使用格式器将字符串转换为LocalDateTime对象
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(formatterPattern);
        LocalDateTime dateTime = LocalDateTime.parse(timeStr, dateTimeFormatter);
        // 如果需要Date对象，可以进一步转换（可能丢失时区信息）
        return Date.from(dateTime.atZone(java.time.ZoneId.systemDefault()).toInstant());
    }

    //格式化时间到分钟，之后余下0秒和0毫秒
    public static Date timeFormatterUntilMinute(Date originalDate){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(originalDate);
        // 设置秒和毫秒为0
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

//    public static void main(String[] args) {
//        Date date = timeFormatterUntilMinute(new Date());
//        log.info("date:{}",date);
//    }
//    public static void main(String[] args) {
//        Date date = timeFormatter("2024/3/25 19:40", "yyyy/M/d H:mm");
//        log.info("date:{}",date);
//    }

//    public static void main(String[] args) {
//        Date date = sTimestampStr2Date("1.71142E+12");
//        log.info("date:{}",date);
//    }
}
